<?php
/**
 *
 *
 * @category     Shuxun Cms
 * @date         2015年10月19日
 * @author       Shuxun Team <kaiping.jiang@scshux.com>
 * @file         SmartyBlock.php
 */
namespace  Scshux\Tag;
use Phalcon\Di\FactoryDefault;
use Scshux\Mvc\SQuery;
class SmartyBlock
{

	/**
	 * 查询
	 * @param unknown $params
	 * @param unknown $content
	 * @param unknown $smarty
	 * @param unknown $repeat
	 * @param unknown $template
	 * @return string
	 */
	public  static  function  query($params, $content, &$smarty, &$repeat, $template)
	{

		extract($params);
		if(!isset($assign))
			$assign = 'item';
		#注册一个block的索引，照顾smarty的版本
		if(method_exists($smarty,'get_template_vars')){
			$_bindex = $smarty->get_template_vars('_bindex');
		} else{
			$_bindex = $smarty->getVariable('_bindex')->value;
		}

		if(!$_bindex){
			$_bindex = array();
		}

		if($name){
			if(!isset($_bindex[$name]))
				$_bindex[$name] = 1;
			else
				$_bindex[$name] ++;
		}

		$smarty->assign('_bindex',$_bindex);

		#在对象$smarty上注册一个数组以供block使用
		if(!isset($smarty->block_data)){
			$smarty->block_data = array();
		}
		#获得一个本区块的专属数据存储空间
		$dataindex = md5(__FUNCTION__ . md5(serialize($params)));
		$dataindex = substr($dataindex,0,16);
		#将使用$smarty->blocksdata[$dataindex]来存储
		#填充数据
		if(!$smarty->block_data[$dataindex])
		{
		#************************************************************************

			if(!isset($name)){
				exit('Please enter table name!');
			}

			$queryObj = new SQuery($name);
			foreach ($params as $key => $val)
			{
				if($key == 'name') continue;
				$queryObj->{$key} = $val;
			}

			#主要数据填充区
			$smarty->block_data[$dataindex] =  $queryObj->find();
			#填充区完成
			#************************************************************************
		}
		#如果没有数据，直接返回null,不必再执行了
		if(!$smarty->block_data[$dataindex])
		{
		$repeat = false;
		return '';
		}
		#取一条数据出栈，并把它指派给$assign，重复执行开关置位1
		if(list($key, $item) = each($smarty->block_data[$dataindex]))
		{
		$smarty->assign($assign,$item);
		$repeat = true;
		}
		#如果已经到达最后，重置数组指针，重复执行开关置位0
		if(!$item)
		{
		reset($smarty->block_data[$dataindex]);
		$repeat = false;
		if($name)
			{
			unset($_bindex[$name]);
			$smarty->assign('_bindex',$_bindex);
		}
		}
		#打印内容
		return $content;
	}

	/**
	 * 系统菜单
	 * @param  $params
	 * @param  $content
	 * @param  \Smarty_Internal_Template $smarty
	 * @param  $repeat
	 * @param  $template
	 */
	public  static  function  menus($params, $content, &$smarty, &$repeat, $template)
	{

		$coreObj = FactoryDefault::getDefault()->get('core');
		/* @var $coreObj \Scshux\Plugin\Core */

		extract($params);
		if(!isset($assign))
			$assign = 'item';
		#注册一个block的索引，照顾smarty的版本
		if(method_exists($smarty,'get_template_vars')){
       		 $_bindex = $smarty->get_template_vars('_bindex');
		} else{
			$_bindex = $smarty->getVariable('_bindex')->value;
		}

		if(!$_bindex){
			$_bindex = array();
		}

		if($name){
			if(!isset($_bindex[$name]))
				$_bindex[$name] = 1;
			else
				$_bindex[$name] ++;
		}

		$smarty->assign('_bindex',$_bindex);

        #在对象$smarty上注册一个数组以供block使用
		if(!isset($smarty->block_data)){
			$smarty->block_data = array();
		}
		#获得一个本区块的专属数据存储空间
		$dataindex = md5(__FUNCTION__ . md5(serialize($params)));
		$dataindex = substr($dataindex,0,16);
		#将使用$smarty->blocksdata[$dataindex]来存储
		#填充数据
		if(!$smarty->block_data[$dataindex])
		{
			#************************************************************************
			#主要数据填充区
			$smarty->block_data[$dataindex] =$coreObj->site->getSiteMenus();
	        #填充区完成
	        #************************************************************************
		}
		#如果没有数据，直接返回null,不必再执行了
		if(!$smarty->block_data[$dataindex])
		{
			$repeat = false;
			return '';
		}
		#取一条数据出栈，并把它指派给$assign，重复执行开关置位1
		if(list($key, $item) = each($smarty->block_data[$dataindex]))
		{
			$smarty->assign($assign,$item);
			$repeat = true;
		}
		#如果已经到达最后，重置数组指针，重复执行开关置位0
		if(!$item)
		{
			reset($smarty->block_data[$dataindex]);
			$repeat = false;
			if($name)
			{
				unset($_bindex[$name]);
				$smarty->assign('_bindex',$_bindex);
			}
		}
		#打印内容
		return  $content;
	}

}